home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Frameworks
/
TransSkel 3.24
/
Demos
/
C Demos
/
Button
/
Document.c
< prev
next >
Wrap
Text File
|
1995-03-21
|
3KB
|
165 lines
/*
* The stuff in this file presents a document window with an outlined
* pushbutton. It demonstrates:
* - Button outlining in a document window.
*
* Note that button clicks are tracked and return/enter and escape/
* command-period keyclicks are mapped onto button clicks, but that no
* other action is associated with those clicks. This window hander
* just shows the visible user interface stuff associated with those
* actions.
*/
# include "TransSkel.h"
# include "Button.h"
# define returnKey 13
# define enterKey 3
# define escapeKey 27
static WindowPtr wind;
static ControlHandle okBtn;
static ControlHandle cancelBtn;
static pascal void
Mouse (Point pt, long t, short mods)
{
ControlHandle ctrl;
short partNo;
if ((partNo = FindControl (pt, wind, &ctrl)) != 0)
{
/*
* Check part code. The constant to use varies. Universal
* headers release 2 define a new constant kInButtonControlPart.
* Release 1 and the old Apple headers use inButton.
*/
#if skelUnivHeaders > 1
if (partNo == kInButtonControlPart)
#else
if (partNo == inButton)
#endif
{
if (TrackControl (ctrl, pt, nil))
{
/* nothing done here */
}
}
}
}
/*
* Key handler. Map return/enter onto clicks in OK button.
* Note that we check whether the OK button is active or not
* before flashing the button. In this application the button
* is never inactive when the window is active, but that may not
* be generally true.
*/
static pascal void
Key (short c, short code, short mods)
{
if (c == returnKey || c == enterKey)
{
if ((**okBtn).contrlHilite == normalHilite)
SkelFlashButton (okBtn);
}
else if (c == escapeKey || SkelCmdPeriod (SkelGetCurrentEvent ()))
{
if ((**cancelBtn).contrlHilite == normalHilite)
SkelFlashButton (cancelBtn);
}
}
/*
* Update the window.
*/
static pascal void
Update (Boolean resized)
{
WindowPtr wind;
Rect r;
short h;
GetPort (&wind);
r = wind->portRect;
EraseRect (&r);
DrawControls (wind);
SkelDrawButtonOutline (okBtn);
}
/*
* Make the buttons active or inactive as the window becomes active or
* inactive. Redraw default button outline to follow state of default
* button.
*/
static pascal void
Activate (Boolean active)
{
short hilite;
hilite = (active ? normalHilite : dimHilite);
HiliteControl (okBtn, hilite);
SkelDrawButtonOutline (okBtn);
HiliteControl (cancelBtn, hilite);
}
static pascal void
Clobber (void)
{
WindowPtr wind;
GetPort (&wind);
HideWindow (wind);
DisposeWindow (wind);
}
/*
* Initialize document window
*/
void
SetupDocument (void)
{
Rect r;
if (SkelQuery (skelQHasColorQD))
wind = GetNewCWindow (docWindRes, nil, (WindowPtr) -1L);
else
wind = GetNewWindow (docWindRes, nil, (WindowPtr) -1L);
if (wind == (WindowPtr) nil)
{
SysBeep (1);
return;
}
SkelWindow (wind,
Mouse,
Key,
Update,
Activate,
nil, /* no close box, so no close handler */
Clobber,
nil, /* no idle handler */
true); /* irrelevant since no idle handler */
SetRect (&r, 10, 20, 80, 40);
cancelBtn = NewControl (wind, &r, "\pCancel", true, 0, 0, 1, pushButProc, 0L);
OffsetRect (&r, 80, 0);
okBtn = NewControl (wind, &r, "\pOK", true, 0, 0, 1, pushButProc, 0L);
ShowWindow (wind);
SkelDoEvents (activMask + updateMask);
}